/**En la clase KbdCmdId se definen los identificadores y valores
 * correspondientes a un teclado de fresadora. Estos valores son 
 * independientes del hecho de que se trate de controles físicos 
 * o virtuales*/
public interface KbdCmdId
{
    /**Contiene los identificadores de botones 
     * que pueden existir en un teclado de una fresadora*/
    public class CmdId
    {
        /**Identificador de una tecla corespondiente a un carácter*/
        public static final int CHARACTER = 0x00,
        /**Identificador de una tecla que no es un carácter*/
        KEYSTROKE = 0x01,
        /**Identificador del bóton de paro de emergencia*/
        EMERGENCY = 0x02,
        /**Identificador de los controles de ciclo de maquinado*/
        CYCLE = 0x03,
        /**Identificador de los controles de elección
         * modo de operación*/
        MODE = 0x04,
        /**Identificador para las opciones de ejecución de programas*/
        OPTION = 0x05,
        /**Identificador del control de corrección de avance*/
        FEEDRATE_OVERRIDE = 0x06,
        /**Identificador del control de avance constante */
        JOG_FEEDRATE = 0x07,
        /**Identificador del control de corrección de avance rápido*/
        RAPID_FEEDRATE_OVERRIDE = 0x08,
        /**Identificador de los ejes*/
        AXIS = 0x09,
        /**Identificador del movimiento y estado del husillo*/
        SPINDLE = 0x0A,
        /**Identificador del control de la velocidad del husillo*/
        SPINDLE_SPEED = 0x0B,
        /**Identificador del control de corrección de la 
         * velocidad del husillo*/
        SPINDLE_OVERRIDE = 0x0C,
        /**Identificador de la manivela*/
        HANDWHEEL = 0x0D,
        /**Identificador de herramienta*/
        TOOL = 0x0E,
        /**Identificador de estado de dispositivos*/
        DEVICE = 0x0F;
    }
    public class CmdValue 
    {
        public static final int EMERGENCY_STOP = 0x00,
        EMERGENCY_CONTINUE = 0x01,
        CYCLE_START = 0x00,
        CYCLE_FEED_HOLD = 0x01,
        MODE_MEMORY = 0x00,
        MODE_MDI = 0x01,
        MODE_FILE_MANAGER = 0x02,
        MODE_EDITOR = 0x03,
        MODE_HANDWHEEL = 0x04,
        MODE_JOG = 0x05,
        MODE_RAPID = 0x06,
        MODE_HOME = 0x07,
        OPTION_SINGLE_BLOCK_OFF = 0x00,
        OPTION_SINGLE_BLOCK_ON = 0x01,
        OPTION_OPTIONAL_STOP_OFF = 0x02,
        OPTION_OPTIONAL_STOP_ON = 0x03,
        OPTION_BLOCK_SKIP_OFF = 0x04,
        OPTION_BLOCK_SKIP_ON = 0x05,
        OPTION_DRY_RUN_OFF = 0x06,
        OPTION_DRY_RUN_ON = 0x07,
        OPTION_MST_LOCK_OFF = 0x08,
        OPTION_MST_LOCK_ON = 0x09,
        OPTION_MACHINE_LOCK_OFF = 0x0A,
        OPTION_MACHINE_LOCK_ON = 0x0B,
        /*AXIS_POSITIVE_IGNORE(i)  (0x00 || (i << 4))
         * AXIS_POSITIVE_SELECT(i)  (0x01 || (i << 4))
         * AXIS_NEGATIVE_IGNORE(i)  (0x02 || (i << 4))
         * AXIS_NEGATIVE_SELECT(i)  (0x03 || (i << 4))*/
        AXIS_X_POSITIVE_IGNORE = 0x00,
        AXIS_X_POSITIVE_SELECT = 0x01,
        AXIS_X_NEGATIVE_IGNORE = 0x02,
        AXIS_X_NEGATIVE_SELECT = 0x03,
        AXIS_Y_POSITIVE_IGNORE = 0x10,
        AXIS_Y_POSITIVE_SELECT = 0x11,
        AXIS_Y_NEGATIVE_IGNORE = 0x12,
        AXIS_Y_NEGATIVE_SELECT = 0x13,
        AXIS_Z_POSITIVE_IGNORE = 0x20,
        AXIS_Z_POSITIVE_SELECT = 0x21,
        AXIS_Z_NEGATIVE_IGNORE = 0x22,
        AXIS_Z_NEGATIVE_SELECT = 0x23,
        SPINDLE_NORMAL_ROTATION = 0x00,
        SPINDLE_REVERSE_ROTATION = 0x01,
        SPINDLE_START = 0x02,
        SPINDLE_STOP = 0x03,
        HANDWHEEL_DECREASE = 0x00,
        HANDWHEEL_INCREASE = 0x01,
        HANDWHEEL_FACTOR_1 = 0x02,
        HANDWHEEL_FACTOR_10 = 0x03,
        HANDWHEEL_FACTOR_100 = 0x04,
        //HANDWHEEL_SELECT_AXIS(i) (0x06 + i)
        HANDWHEEL_SELECT_AXIS_X = 0x05,
        HANDWHEEL_SELECT_AXIS_Y = 0x06,
        HANDWHEEL_SELECT_AXIS_Z = 0x07,
        DEVICE_DISABLE = 0x00,
        DEVICE_ENABLE = 0x01,
        DEVICE_AUTOMATIC = 0x02;
    }
}
